package org.onion.pattern.event.outbox;

import org.onion.pattern.event.outbox.data.OutboxEventInfo;

import java.util.List;
import java.util.Optional;
import java.util.Set;

public interface OutboxEventStorage {

    /**
     * 查询就绪的事件
     */
    List<OutboxEventInfo> findReadyEventByGroup(String group, int limit);

    /**
     * 根据事件Key 查询
     */
    Optional<OutboxEventInfo> findByEventKey(String eventKey);

    /**
     * 创建
     */
    void insert(OutboxEventInfo eventInfo);

    void batchInsert(List<OutboxEventInfo> eventInfo);

    /**
     * 确认事件
     */
    void ack(Set<String> eventKeys);

    /**
     * 删除事件
     */
    void deleteByEventKey(Set<String> eventKeys);

}
